package org.zch.service.impl;

import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zch.dao.ZuoRuiDAO;
import org.zch.entity.po.AdminInfoPO;
import org.zch.entity.po.UserInfoPO;
import org.zch.entity.po.ZuoRuiPO;
import org.zch.service.ZuoRuiService;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * 管理员
 * 方法实现层
 *
 * @author 赵昌虎
 */
@Service
public class ZuoRuiServiceImpl implements ZuoRuiService {

    @Autowired
    private ZuoRuiDAO zuoRuiDAO;


    @Override
    public Integer addZuoRui(String ip8266, String status) {
        ZuoRuiPO selectZR = getZuoRui(ip8266);
        if (selectZR != null){
            return 100;
        }else {
            ZuoRuiPO zuoRuiPO = new ZuoRuiPO();
            zuoRuiPO.setStatus(status);
            zuoRuiPO.setIp8266(ip8266);
            zuoRuiPO.setDanger("0");
            zuoRuiPO.setLastTime(new Date());
            zuoRuiPO.setTimeRepeat("否");
            zuoRuiPO.setTimeOpen("0");
            zuoRuiPO.setTimeClose("0");
            return zuoRuiDAO.insert(zuoRuiPO);
        }
    }

    @Override
    public Integer upZuoRuiStatus(String ip8266, String status) {
        return zuoRuiDAO.upZuoRuiStatus(ip8266,new Date(),status);
    }

    @Override
    public Integer upZuoRuiDanger(String ip8266, String danger) {
        return zuoRuiDAO.upZuoRuiDanger(ip8266, danger);
    }

    @Override
    public Integer upZuoRuiTime(String ip8266, String timeRepeat, String timeOpen, String timeClose) {
        return zuoRuiDAO.upZuoRuiTime(ip8266, timeRepeat,timeOpen,timeClose);
    }

    @Override
    public String getZuoRuiStatus(String ip8266){
        String re = "关闭";
        LambdaQueryWrapper<ZuoRuiPO> queryWrapper = ZuoRuiPO.getQueryWrapper();
        queryWrapper.eq(ZuoRuiPO::getIp8266, ip8266);
        List<ZuoRuiPO> zuoRuiPO = zuoRuiDAO.selectList(queryWrapper);
        if (!zuoRuiPO.isEmpty()){
            ZuoRuiPO zR = zuoRuiPO.get(0);
            re = zR.getStatus();

            //判断是否定时
            try {
                //是否需要修改
                Calendar calendar = Calendar.getInstance();
                Integer hours = calendar.get(Calendar.HOUR_OF_DAY);
                int minutes = calendar.get(Calendar.MINUTE);
                int seconds = calendar.get(Calendar.SECOND);

                String mH = hours + "";
                if (hours < 10){
                    mH = "0" + hours;
                }

                String mM = minutes + "";
                if (minutes < 10){
                    mM = "0" + minutes;
                }

                String mS = seconds + "";
                if (seconds < 10){
                    mS = "0" + seconds;
                }

                String mS1 = (seconds + 1) + "";
                if (seconds + 1 < 10){
                    mS1 = "0" + (seconds + 1);
                }

                String time1 = mH + ":" + mM + ":" + mS;
                String time2 = mH + ":" + mM + ":" + mS1;

                if (!Objects.equals(zR.getTimeOpen(), "0") && (Objects.equals(zR.getTimeOpen(), time1) || Objects.equals(zR.getTimeOpen(), time2))){
                    //修改开关状态为打开
                    zuoRuiDAO.upZuoRuiStatus(ip8266,new Date(),"打开");

                    if (zR.getTimeRepeat().contains("否")){
                        //修改定时开 和 定时 关 为 0
                        zuoRuiDAO.upZuoRuiTime(ip8266, zR.getTimeRepeat(),"0",zR.getTimeClose());
                    }

                }

                if (!Objects.equals(zR.getTimeClose(), "0")  && (Objects.equals(zR.getTimeClose(), time1) || Objects.equals(zR.getTimeClose(), time2))){
                    //修改开关状态为关闭
                    zuoRuiDAO.upZuoRuiStatus(ip8266,new Date(),"关闭");

                    if (zR.getTimeRepeat().contains("否")){
                        //修改定时开 和 定时 关 为 0
                        zuoRuiDAO.upZuoRuiTime(ip8266, zR.getTimeRepeat(),zR.getTimeOpen(),"0");
                    }

                }
            }catch (Exception e){
                e.printStackTrace();
            }

        }
        return re;
    }

    @Override
    public ZuoRuiPO getZuoRui(String ip8266){
        ZuoRuiPO re = null;
        LambdaQueryWrapper<ZuoRuiPO> queryWrapper = ZuoRuiPO.getQueryWrapper();
        queryWrapper.eq(ZuoRuiPO::getIp8266, ip8266);
        List<ZuoRuiPO> zuoRuiPO = zuoRuiDAO.selectList(queryWrapper);
        if (!zuoRuiPO.isEmpty()){
            re = zuoRuiPO.get(0);
        }
        return re;
    }

    @Override
    public Integer upLastTime(String ip8266) {
        return zuoRuiDAO.upLastTime(ip8266,new Date());
    }


    @Override
    public List<ZuoRuiPO> findAll() {
        return zuoRuiDAO.findAll();
    }
}
